package com.hsu.apibackend.service.inner.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.hsu.apibackend.service.InterfaceInfoService;
import com.hsu.apicommon.model.entity.InterfaceInfo;
import com.hsu.apicommon.service.inner.InnerInterfaceInfoService;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboService;

import javax.annotation.Resource;

/**
 * @Author: Hsu琛君珩
 * @Date: 2024年09月09日 19:43
 * @Version: 1.0
 * @Description: 实现接口信息的查询服务，基于URL路径和HTTP方法获取接口信息。
 */
@DubboService
@Slf4j
public class InnerInterfaceInfoServiceImpl implements InnerInterfaceInfoService {

    @Resource
    private InterfaceInfoService interfaceInfoService;

    /**
     * 根据URL路径和HTTP方法查询接口信息
     *
     * @param path 接口的URL路径
     * @param method HTTP方法（GET, POST等）
     * @return 返回查询到的接口信息
     */
    @Override
    public InterfaceInfo getInterfaceInfo(String path, String method) {
        // 如果URL带有参数，去除第一个 '?' 和之后的部分
        if (path.contains("?")) {
            path = path.substring(0, path.indexOf("?"));
        }

        // 去除URL中的协议前缀 (http:// 或 https://)
        if (path.startsWith("http://")) {
            path = path.substring(7);
        }
        if (path.startsWith("https://")) {
            path = path.substring(8);
        }

        // 记录查询路径
        log.info("【查询地址】：" + path);

        // 构造查询条件
        LambdaQueryWrapper<InterfaceInfo> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(InterfaceInfo::getMethod, method);
        lambdaQueryWrapper.like(InterfaceInfo::getUrl, path);

        // 查询并返回匹配的接口信息
        return interfaceInfoService.getOne(lambdaQueryWrapper);
    }
}
